package com.xmim.fulcrum;

import com.xmim.fulcrum.node.FulcrumNode;
import com.xmim.fulcrum.node.FulcrumNodeListener;

import java.util.Set;

public interface FulcrumPathCache<T> {
    /**
     * 初始化节点缓存
     *
     * @param clazz
     */
    void init(Class<? extends FulcrumNode> clazz);

    /**
     * 获取节点路径
     *
     * @return
     */
    String getPath();

    /**
     * 获取序号缓存路径
     *
     * @return
     */
    String getSerialPath();

    /**
     * 关闭缓存
     */
    void close();

    /**
     * 设置节点监听
     *
     * @param fulcrumNodeListener
     */
    void setFulcrumNodeListener(FulcrumNodeListener fulcrumNodeListener);

    /**
     * 根据ID会话缓存的节点
     *
     * @param id
     * @return
     */
    T getNode(String id);

    /**
     * 添加节点
     *
     * @param node
     */
    void addNode(T node);

    /**
     * 移除节点
     *
     * @param id
     */
    void removeNode(String id);

    /**
     * 判断节点是否存在
     *
     * @param id
     * @return
     */
    boolean hasNode(String id);

    /**
     * 获取所有节点
     *
     * @return
     */
    Set<T> nodes();
}
